{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 拓扑排序\n",
    "\n",
    "import igraph as ig\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 构建有向无环图\n",
    "g = ig.Graph(\n",
    "    edges=[(0, 1), (0, 2), (1, 3), (2, 4), (4, 3), (3, 5), (4, 5)],\n",
    "    directed=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 检查是否是有向无环图\n",
    "assert g.is_dag"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Topological sort of g (out): 0 1 2 4 3 5\n"
     ]
    }
   ],
   "source": [
    "# 如果给定的图不是有向无环图, 会报错\n",
    "results = g.topological_sorting(mode='out')\n",
    "print('Topological sort of g (out):', *results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Topological sort of g (in): 5 3 1 4 2 0\n"
     ]
    }
   ],
   "source": [
    "# 有两种模式对于拓扑排序in或者out\n",
    "results = g.topological_sorting(mode='in')\n",
    "print('Topological sort of g (in):', *results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "degree of 0: 0\n",
      "degree of 1: 1\n",
      "degree of 2: 1\n",
      "degree of 3: 2\n",
      "degree of 4: 1\n",
      "degree of 5: 2\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n",
      "findfont: Font family 'xkcd' not found.\n",
      "findfont: Font family 'xkcd Script' not found.\n",
      "findfont: Font family 'Humor Sans' not found.\n",
      "findfont: Font family 'Comic Neue' not found.\n",
      "findfont: Font family 'Comic Sans MS' not found.\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可以找到节点的入度\n",
    "\n",
    "for i in range(g.vcount()):\n",
    "    print('degree of {}: {}'.format(i, g.vs[i].indegree()))\n",
    "\n",
    "# %\n",
    "# Finally, we can plot the graph to make the situation a little clearer.\n",
    "# Just to change things up a bit, we use the matplotlib visualization mode\n",
    "# inspired by `xkcd <https://xkcd.com/>_:\n",
    "with plt.xkcd():\n",
    "    fig, ax = plt.subplots(figsize=(5, 5))\n",
    "    ig.plot(\n",
    "            g,\n",
    "            target=ax,\n",
    "            layout='kk',\n",
    "            vertex_size=0.3,\n",
    "            edge_width=4,\n",
    "            vertex_label=range(g.vcount()),\n",
    "            vertex_color=\"white\",\n",
    "        )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.10.6 ('py310')",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.6"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "49ec5068d4d6d3736c39d3918a16f1ca551a23384109b69898c01c2015d1370c"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
